
/**
 * 1、数组类型是引用类型，数组变量是引用变量
 * 2、数组变量中存储的是数组对象在堆区中的首地址
 * 3、字面量 null 可以赋值给任意类型的引用变量
 * 4、当通过 引用变量 访问 实例变量 或 实例方法 时，如果 引用变量 取值为 null 则会导致 NPE
 */
public class ArrayHelper {

    public static boolean equal( int[] first , int[] second ) {

        // 当传入的参数中 first 或 second 中有一个为 null 时会触发 NullPointerException
        // 对于 实例变量 和 实例方法 来说，但凡是 原点运算符 之前的 变量取值为 null 时就会抛出 空指针异常 ( NPE : NullPointerException )
        if( first.length != second.length ) {
            // 如果两个数组中元素个数不同，则直接返回 false ，方法立即结束
            return false ; 
        }

        for ( int i = 0 ; i < first.length; i++ ) {
            if( first[ i ] != second[ i ] ) {
                // 但凡是找到任意的一对不相等的元素，就直接返回 false ，方法立即结束
                return false ; 
            }
        }

        return true ;
    }

    public static void main(String[] args) {

        int[] first = null ; // 字面量 null 可以赋值给任意类型的引用变量
        System.out.println( first );

        int[] second = null ;
        System.out.println( second );

        // 【下行代码执行时会抛出 NPE ( NullPointerException ，中文称作 空指针异常 ) 】
        boolean b = ArrayHelper.equal( first , second ); // java.lang.NullPointerException
        System.out.println( b );

        // 创建新的数组对象并使用数组常量对数组进行初始化，最后将数组对象的首地址赋值给 数组变量
        first = new int[] { 1 , 3 , 5 , 7 , 9 }; 

        // int[] second = { 2 , 4 , 6 , 8 , 10 }; // 无独有偶
        second = new int[] { 1 , 3 , 5 , 7 , 9 };

        boolean x = ArrayHelper.equal( first , second );
        System.out.println( x );
        
    }

}
